package com.example.beauty.contact;

import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Filter;
import android.widget.Filterable;

import com.example.beauty.db.gen.Note;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义Note类型的Adapter，用于放入ListView控件中
 */

public class NoteAdapter extends BaseAdapter{

    /**
     * 构造函数
     * @param context 上下文（ListView所在的Activity）
     * @param resourceID 布局文件ID（自己创建的一个布局文件，将要显示在ListView项中）
     * @param list  数据（在ListView显示的数据）
     */
    private Context context = null;
    private int resourceID = 0;
    private List<Note> list = null;

    //MyFilter mFilter ;
    private ViewHolder viewHolder;
    private List<Note> oldNoteList; //原始数据
    private List<Note> newNoteList; //这个数据是会改变的，所以要有个变量来备份一下原始数据
    //LayoutInflater inflater ;//添加反射器

    public NoteAdapter(Context context, int resourceID, List<Note> list) {
        this.context = context;
        this.resourceID = resourceID;
        this.list = list;
    }

    public NoteAdapter() { }

    //返回显示项的数目给LiesView
    @Override
    public int getCount() {
        return list.size();
    }
    //返回当前项对应的对象
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
//    public Object getItem(int position) {
//        return null;}

        //返回当前项的位置
    @Override
    public long getItemId(int position) {
        return position;
    }
//    public long getItemId(int position) {
//        return 0;}

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Note note = (Note) getItem(position);
        viewHolder = new ViewHolder();
        /**
         * 1.如果没有解析过布局文件则去解析，解析过则不解析
         * 2.用解析过后得到的view找到布局文件中的文件
         * 3.并赋值给viewHolder的属性——以后这个属性就可以重复使用，不再需要去findViewById
         */
        if(convertView == null){
            convertView = LayoutInflater.from(context).inflate(resourceID,null);
            /*主界面的TextView*/
            viewHolder.textName = (TextView)convertView.findViewById(R.id.name_ItemTextView);
            viewHolder.textdate = (TextView)convertView.findViewById(R.id.date_ItemTextView);
            /*编辑界面的EditText*/
            viewHolder.edietextName = (EditText)convertView.findViewById(R.id.name_EditText);
            viewHolder.edittextPhone = (EditText)convertView.findViewById(R.id.phone_EditText);
            //给convertView设置附加数据
            convertView.setTag(viewHolder);
        }else{
            //从convertView拿去附加数据
            viewHolder = (ViewHolder) convertView.getTag();
        }
        //设置对应组件显示的内容
        viewHolder.textName.setText(note.getName());
        viewHolder.textdate.setText(note.getDate());
        /*viewHolder.edietextName.setText(note.getName());
        viewHolder.edittextPhone.setText(note.getPhone());*/
        return convertView;
    }

    /*public Filter getFilter() {
        if (mFilter ==null){
            mFilter = new MyFilter();
        }
        return mFilter;
    }
    //我们需要定义一个过滤器的类来定义过滤规则
    class MyFilter extends Filter{
        //我们在performFiltering(CharSequence charSequence)这个方法中定义过滤规则
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            FilterResults result = new FilterResults();
            List<Note> searchlist ;
            if (TextUtils.isEmpty(charSequence)){//当过滤的关键字为空的时候，我们则显示所有的数据
                searchlist  = oldNoteList;
            }else {//否则把符合条件的数据对象添加到集合中
                searchlist = new ArrayList<>();
                for (Note searchnote:oldNoteList){
                    if (searchnote.getName().contains(charSequence)){ //要匹配的item中的view
                        searchlist.add(searchnote);
                    }

                }
            }
            result.values = searchlist; //将得到的集合保存到FilterResults的value变量中
            result.count = searchlist.size();//将集合的大小保存到FilterResults的count变量中

            return result;
        }
        //在publishResults方法中告诉适配器更新界面
        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            newNoteList = (List<Note>)filterResults.values;
            if (filterResults.count>0){
                notifyDataSetChanged();//通知数据发生了改变
            }else {
                notifyDataSetInvalidated();//通知数据失效
            }
        }
    }*/
}

